﻿namespace ParseXAML
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Xml;
    using System.Xml.Serialization;

    public static class BaseIO<T> where T: class,new()
    {
        public static string ToXmlString(T data)
        {
            System.IO.StringWriter sw = new System.IO.StringWriter();
            SaveToStream(sw, data);
            return sw.ToString();
        }

        /// <summary>
        /// Chage le contenu à partir d'un fichier
        /// </summary>
        /// <param name="fileName">Nom du fichier</param>
        /// <returns>Renvoie une instance de l'objet</returns>
        public static T ReadFromFile(string fileName)
        {
            if (System.IO.File.Exists(fileName))
            {
                using (System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open))
                {
                    return ReadFromStream(fs);
                }
            }
            else
            {
                return new T();
            }
        }

        /// <summary>
        /// Charge le contenu à partir d'un stream
        /// </summary>
        /// <param name="stream">Stream qui contient les données</param>
        /// <returns>Renvoie une instance de l'objet</returns>
        public static T ReadFromStream(System.IO.Stream stream)
        {
            XmlSerializer o = new XmlSerializer(typeof(T));
            return o.Deserialize(stream) as T;
        }

        /// <summary>
        /// Sauve le contenu dans un stream
        /// </summary>
        /// <param name="stream">Stream dans lequel sera sérializé l'objet</param>
        public static void SaveToStream(System.IO.TextWriter stream, T data)
        {
            XmlSerializer o = new XmlSerializer(typeof(T));
            o.Serialize(stream, data);
        }

        /// <summary>
        /// Sauve le contenu de la classe dans un fichier XML
        /// </summary>
        /// <param name="fileName">Nom du fichier</param>
        public static void SaveToFile(string fileName, T data)
        {
            using (System.IO.StreamWriter fs = new System.IO.StreamWriter(fileName, false))
            {
                SaveToStream(fs, data);
                fs.Close();
            }
        }

    }
}
